home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.xml;
-
- import com.extensibility.util.Debug;
- import com.extensibility.util.StringUtilities;
- import java.io.IOException;
- import java.util.Vector;
-
- public final class DTDUtilities {
- static Vector parseDecls(String var0) throws ParserException {
- URI var1 = URI.makeStringURI(var0);
- Schema var2 = new Schema(var1, DTDFlavor.NAME);
-
- try {
- var2.parse(var1, var2.getCount(), (Object)null);
- } catch (IOException var4) {
- Debug.assert(var4);
- }
-
- if (var2.parseErrors.size() >= 1) {
- throw new ParserException(var2.parseErrors);
- } else {
- Debug.assert(var2.declarations.size() > 0, "neither a decl nor error was created");
- return var2.declarations;
- }
- }
-
- public static int findMate(String var0, int var1) {
- int var2 = 0;
- if (var0.charAt(var1) == '(') {
- for(; var1 < var0.length(); ++var1) {
- if (var0.charAt(var1) == '(') {
- ++var2;
- } else if (var0.charAt(var1) == ')') {
- --var2;
- if (var2 == 0) {
- break;
- }
- }
- }
-
- return var1;
- } else {
- for(; var1 >= 0; --var1) {
- if (var0.charAt(var1) == ')') {
- --var2;
- } else if (var0.charAt(var1) == '(') {
- ++var2;
- if (var2 == 0) {
- break;
- }
- }
- }
-
- return var1;
- }
- }
-
- public static boolean isInside(String var0, int var1, char var2, char var3) {
- while(var1 >= 0) {
- if (var0.charAt(var1) == var2) {
- return true;
- }
-
- if (var0.charAt(var1) == var3) {
- return false;
- }
-
- --var1;
- }
-
- return false;
- }
-
- public static int findTermStart(String var0, int var1) {
- if (var1 < 0) {
- var1 = 0;
- }
-
- if (var1 >= var0.length()) {
- if (var1 == 0) {
- return -1;
- }
-
- if (DTDParser.isConnectorChar(var0.charAt(var0.length() - 1))) {
- return var1;
- }
-
- var1 = var0.length() - 1;
- }
-
- char var2 = var0.charAt(var1);
- if (var2 != '(') {
- if (var2 == ')') {
- var1 = findMate(var0, var1);
- } else if (var0.charAt(var1) == ContentModelTerm.TAG_TYPE_SEPARATOR || DTDParser.isNameChar(var0.charAt(var1)) && !isInside(var0, var1, '{', '}')) {
- while(var1 >= 0 && (var0.charAt(var1) == ContentModelTerm.TAG_TYPE_SEPARATOR || DTDParser.isNameChar(var0.charAt(var1)))) {
- --var1;
- }
-
- ++var1;
- } else {
- --var1;
-
- while(var1 >= 0 && var0.charAt(var1) != ')' && !DTDParser.isNameChar(var0.charAt(var1)) && !DTDParser.isConnectorChar(var0.charAt(var1)) || isInside(var0, var1, '{', '}')) {
- --var1;
- }
-
- if (var1 >= 0) {
- if (var0.charAt(var1) == ')') {
- var1 = findMate(var0, var1);
- } else if (DTDParser.isConnectorChar(var0.charAt(var1))) {
- while(var1 < var0.length() && var0.charAt(var1) != '(' && !DTDParser.isNameChar(var0.charAt(var1))) {
- ++var1;
- }
- } else if (var1 >= 0) {
- while(var1 >= 0 && (DTDParser.isNameChar(var0.charAt(var1)) || var0.charAt(var1) == ContentModelTerm.TAG_TYPE_SEPARATOR)) {
- --var1;
- }
-
- ++var1;
- }
- }
- }
- }
-
- if (var1 < 0) {
- var1 = 0;
- } else if (var1 >= var0.length()) {
- var1 = var0.length() - 1;
- }
-
- return var1;
- }
-
- public static String parseLocalTag(String var0, int var1) {
- int var2;
- for(var2 = var1; var2 < var0.length() && DTDParser.isNameChar(var0.charAt(var2)); ++var2) {
- }
-
- return var2 < var0.length() && var0.charAt(var2) == ContentModelTerm.TAG_TYPE_SEPARATOR ? var0.substring(var1, var2) : null;
- }
-
- public static String parseName(String var0, int var1) {
- int var2;
- for(var2 = var1; var2 < var0.length() && (DTDParser.isNameChar(var0.charAt(var2)) || var0.charAt(var2) == ContentModelTerm.TAG_TYPE_SEPARATOR); ++var2) {
- }
-
- return var0.substring(var1, var2);
- }
-
- public static String parseDigits(String var0, int var1) {
- int var2;
- for(var2 = var1; var2 < var0.length() && DTDParser.isDigitChar(var0.charAt(var2)); ++var2) {
- }
-
- return var0.substring(var1, var2);
- }
-
- public static int parseTerm(String var0, int var1, ContentModelTerm var2) {
- boolean var3 = false;
- if (var0.charAt(var1) == '(') {
- var1 = findMate(var0, var1) + 1;
- var2.updateModelTerm();
- } else {
- String var4 = parseLocalTag(var0, var1);
- if (var4 != null) {
- var1 += var4.length() + 1;
- }
-
- String var5 = parseName(var0, var1);
- var1 += var5.length();
- var2.updateModelTerm(new TypeRef(var5));
- var2.setLocalTag(var4);
- }
-
- int[] var10 = new int[2];
-
- try {
- var1 = parseOccurance(var0, var1, var10);
- var2.setOccurance(var10[0], var10[1]);
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var1 < var0.length() && DTDParser.isConnectorChar(var0.charAt(var1))) {
- var2.setConnection(var0.charAt(var1));
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- } else {
- var2.setConnection(',');
- }
- } catch (IllegalArgumentException var6) {
- while(var1 < var0.length() && !DTDParser.isNameChar(var0.charAt(var1)) && var0.charAt(var1) != ')') {
- ++var1;
- }
-
- if (var1 < var0.length() && isInside(var0, var1, '{', '}') || var0.charAt(var1) == '{') {
- do {
- ++var1;
- } while(var1 < var0.length() && var0.charAt(var1) != '}');
- }
- }
-
- var1 = StringUtilities.skipWhite(var0, var1);
- return var1;
- }
-
- public static int parseOccurance(String var0, int var1, int[] var2) throws IllegalArgumentException {
- var2[0] = 1;
- var2[1] = 1;
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var1 >= var0.length()) {
- return var1;
- } else {
- char var3 = var0.charAt(var1);
- if (DTDParser.isOccuranceChar(var3)) {
- if (var3 == '?') {
- var2[0] = 0;
- } else if (var3 == '+') {
- var2[1] = Integer.MAX_VALUE;
- } else if (var3 == '*') {
- var2[0] = 0;
- var2[1] = Integer.MAX_VALUE;
- }
-
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- } else if (var3 == '{') {
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- String var4 = parseDigits(var0, var1);
- var1 += var4.length();
- var2[0] = Integer.parseInt(var4);
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var0.charAt(var1) != ',') {
- throw new IllegalArgumentException("expected ','");
- }
-
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- if (var0.charAt(var1) == '*') {
- var2[1] = Integer.MAX_VALUE;
- ++var1;
- } else {
- String var5 = parseDigits(var0, var1);
- var1 += var5.length();
- var2[1] = Integer.parseInt(var5);
- }
-
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var0.charAt(var1) != '}') {
- throw new IllegalArgumentException("expected '}'");
- }
-
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- }
-
- return var1;
- }
- }
-
- public static int parseSourceOccurance(String var0, int var1, int[] var2) throws IllegalArgumentException {
- var2[0] = 1;
- var2[1] = 1;
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var1 >= var0.length()) {
- return var1;
- } else {
- char var3 = var0.charAt(var1);
- if (DTDParser.isOccuranceChar(var3)) {
- if (var3 == '?') {
- var2[0] = 0;
- } else if (var3 == '+') {
- var2[1] = Integer.MAX_VALUE;
- } else if (var3 == '*') {
- var2[0] = 0;
- var2[1] = Integer.MAX_VALUE;
- }
-
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- } else {
- var1 = StringUtilities.skipWhite(var0, var1);
- String var4 = parseDigits(var0, var1);
- var1 += var4.length();
- var2[0] = Integer.parseInt(var4);
- var1 = StringUtilities.skipWhite(var0, var1);
- if (var0.charAt(var1) != ',') {
- throw new IllegalArgumentException("expected ','");
- }
-
- var1 = StringUtilities.skipWhite(var0, var1 + 1);
- if (var0.charAt(var1) == '*') {
- var2[1] = Integer.MAX_VALUE;
- ++var1;
- } else {
- String var5 = parseDigits(var0, var1);
- var1 += var5.length();
- var2[1] = Integer.parseInt(var5);
- }
-
- var1 = StringUtilities.skipWhite(var0, var1);
- }
-
- return var1;
- }
- }
-
- static BaseDeclaration parseDecl(String var0) throws ParserException {
- URI var1 = URI.makeStringURI(var0);
- Schema var2 = new Schema(var1, DTDFlavor.NAME);
-
- try {
- var2.parse(var1, var2.getCount(), (Object)null);
- } catch (IOException var4) {
- Debug.assert(var4);
- }
-
- if (var2.declarations.size() > 1) {
- var2.addError(new ParserException(200, (new Integer(var2.declarations.size())).toString()));
- }
-
- if (var2.parseErrors.size() >= 1) {
- throw new ParserException(var2.parseErrors);
- } else {
- Debug.assert(var2.declarations.size() > 0, "neither a decl nor error was created");
- return (BaseDeclaration)var2.declarations.elementAt(0);
- }
- }
-
- public static boolean boundedByParens(String var0) {
- int var1 = 0;
- boolean var2 = true;
- boolean var3 = false;
-
- for(int var4 = 0; var4 < var0.length(); ++var4) {
- char var5 = var0.charAt(var4);
- if (var5 == '(') {
- ++var1;
- if (var3) {
- return false;
- }
-
- var2 = false;
- } else if (var5 == ')') {
- --var1;
- if (var1 == 0) {
- var3 = true;
- }
- } else if (!DTDParser.isOccuranceChar(var5) && !DTDParser.isWhiteChar(var5)) {
- if (var3 && var5 == '{') {
- while(var4 < var0.length() && var0.charAt(var4) != '}') {
- ++var4;
- }
-
- if (var4 == var0.length()) {
- return false;
- }
- } else if (var2 || var3) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- public static String extractPrefix(String var0) {
- int var1 = var0.indexOf(58);
- return var1 == -1 ? "" : var0.substring(0, var1);
- }
-
- public static String extractUnqualifiedName(String var0) {
- int var1 = var0.indexOf(58);
- return var1 == -1 ? var0 : var0.substring(var1 + 1);
- }
-
- public static String generateValidName(String var0) {
- StringBuffer var1 = new StringBuffer();
- if (var0.length() == 0 || !DTDParser.isNameStartChar(var0.charAt(0))) {
- var1.append("xa_");
- }
-
- for(int var2 = 0; var2 < var0.length(); ++var2) {
- char var3 = var0.charAt(var2);
- if (DTDParser.isNameChar(var3)) {
- var1.append(var3);
- } else {
- var1.append('_');
- }
- }
-
- return var1.toString();
- }
-
- public static String makeValidName(String var0) {
- StringBuffer var1 = new StringBuffer();
- boolean var2 = false;
-
- for(int var3 = 0; var3 < var0.length(); ++var3) {
- if (!var2) {
- if (DTDParser.isNameStartChar(var0.charAt(var3))) {
- var1.append(var0.charAt(var3));
- var2 = true;
- }
- } else if (DTDParser.isNameChar(var0.charAt(var3))) {
- var1.append(var0.charAt(var3));
- }
- }
-
- if (var1.length() == 0) {
- return makeValidName(String.valueOf("_").concat(String.valueOf(var0)));
- } else {
- return var1.toString();
- }
- }
-
- public static boolean isPEReference(String var0) {
- return var0.length() > 0 && var0.charAt(0) == '%';
- }
-
- public static boolean isPEName(String var0) {
- return var0.length() > 0 && var0.charAt(0) == '%';
- }
-
- public static boolean isGEName(String var0) {
- return var0.length() > 0 && var0.charAt(0) == '&';
- }
-
- public static boolean isValidName(String var0) {
- if (var0.length() == 0) {
- return false;
- } else if (!DTDParser.isNameStartChar(var0.charAt(0))) {
- return false;
- } else {
- for(int var1 = 1; var1 < var0.length(); ++var1) {
- var0.charAt(var1);
- if (!DTDParser.isNameChar(var0.charAt(var1))) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- public static Vector extractNames(String var0, char var1) {
- Vector var2 = new Vector();
- boolean var3 = false;
- int var4 = 0;
-
- for(int var5 = var0.indexOf(var1, var4); var5 >= 0; var5 = var0.indexOf(var1, var4)) {
- for(var4 = var5 + 1; var4 < var0.length() && DTDParser.isNameChar(var0.charAt(var4)); ++var4) {
- }
-
- var2.addElement(var0.substring(var5 + 1, var4));
- }
-
- return var2;
- }
-
- public static Vector extractNames(String var0) {
- Vector var2 = new Vector();
- int var3 = -1;
-
- for(int var4 = 0; var4 < var0.length(); ++var4) {
- char var5 = var0.charAt(var4);
- if (DTDParser.isNameChar(var5)) {
- if (var3 == -1) {
- var3 = var4;
- if (var4 > 0 && "#%&".indexOf(var0.charAt(var4 - 1)) >= 0) {
- var3 = var4 - 1;
- }
- }
- } else if (var3 >= 0) {
- var2.addElement(var0.substring(var3, var4));
- var3 = -1;
- }
- }
-
- if (var3 >= 0) {
- var2.addElement(var0.substring(var3));
- }
-
- return var2;
- }
-
- public static String extractName(String var0, int var1) {
- int var4 = var0.length();
- if (var1 < var4 && var1 >= 0) {
- int var3;
- for(var3 = var1; var3 < var4; ++var3) {
- char var5 = var0.charAt(var3);
- if (!DTDParser.isNameChar(var5)) {
- break;
- }
- }
-
- int var2;
- for(var2 = var1; var2 >= 0; --var2) {
- char var7 = var0.charAt(var2);
- if (!DTDParser.isNameChar(var7)) {
- if (var7 == '&' || var7 == '%') {
- --var2;
- }
- break;
- }
- }
-
- ++var2;
- return var2 >= var3 ? null : var0.substring(var2, var3);
- } else {
- return null;
- }
- }
-
- public static String convertGEName(String var0, boolean var1) {
- if (var1) {
- return var0.charAt(0) == '&' ? var0 : String.valueOf('&').concat(String.valueOf(var0));
- } else {
- return var0.charAt(0) != '&' ? var0 : var0.substring(1);
- }
- }
-
- public static String convertPEName(String var0, boolean var1) {
- if (var1) {
- return var0.charAt(0) == '%' ? var0 : String.valueOf('%').concat(String.valueOf(var0));
- } else {
- String var2;
- if (var0.charAt(0) != '%') {
- var2 = var0;
- } else {
- var2 = var0.substring(1);
- }
-
- if (var2.charAt(var2.length() - 1) == ';') {
- var2 = var2.substring(0, var2.length() - 1);
- }
-
- return var2;
- }
- }
-
- public static String convertPEReferences(String var0, boolean var1) {
- if (var0 == null) {
- return "";
- } else if (var0.indexOf(37) == -1) {
- return var0;
- } else {
- StringBuffer var2 = new StringBuffer();
- byte var3 = 0;
- int var4 = 0;
- int var5 = 0;
- if (var1) {
- for(int var6 = var0.indexOf(37, var3); var6 >= 0; var6 = var0.indexOf(37, var4)) {
- for(var4 = var6 + 1; var4 < var0.length() && DTDParser.isNameChar(var0.charAt(var4)); ++var4) {
- }
-
- var2.append(var0.substring(var5, var4));
- if (var4 == var0.length() || var0.charAt(var4) != ';') {
- var2.append(";");
- }
-
- var5 = var4;
- }
-
- var2.append(var0.substring(var4));
- } else {
- for(int var7 = var0.indexOf(37, var3); var7 >= 0; var7 = var0.indexOf(37, var4)) {
- for(var4 = var7 + 1; var4 < var0.length() && DTDParser.isNameChar(var0.charAt(var4)); ++var4) {
- }
-
- var2.append(var0.substring(var5, var4));
- if (var4 < var0.length() && var0.charAt(var4) == ';') {
- ++var4;
- }
-
- var5 = var4;
- }
-
- var2.append(var0.substring(var4));
- }
-
- return var2.toString();
- }
- }
-
- public static Vector parseNameList(String var0, char var1) throws ParserException {
- Vector var2 = new Vector();
- int var3 = var0.length();
- int var4 = -1;
-
- for(int var5 = 0; var5 < var3; ++var5) {
- char var6 = var0.charAt(var5);
- if (DTDParser.isNameChar(var6)) {
- if (var4 == -1) {
- var4 = var5;
- }
- } else if (var6 == '%' && var4 == -1) {
- var4 = var5;
- } else {
- if (var4 > -1) {
- var2.addElement(var0.substring(var4, var5));
- var4 = -1;
- }
-
- if (var6 != var1 && !DTDParser.isWhiteChar(var6)) {
- throw new ParserException(201, var0.substring(0, var5 + 1));
- }
- }
- }
-
- if (var4 > -1) {
- var2.addElement(var0.substring(var4, var3));
- }
-
- return var2;
- }
- }
-